package ai.loa.ai;

import java.io.Serializable;

public class Mossa implements Comparable<Mossa>, Serializable {
	/**
	 * 
	 */
	private static final long serialVersionUID = -808779409917161608L;
	// [partenza][destinazione]

	public int type;
	// mi dice la cella da cui parte la mossa; io genero tutte le possibili
	// mosse da quella cella
	public int cellStartX, cellStartY, cellDestX, cellDestY, player;
	// public double distance;
	public int distanceDestination;
	public int distanceSource;
	public boolean mangia;
	public static final int TYPE_MOVE = 1, TYPE_NULL_MOVE = -1;

	@Override
	public int compareTo(Mossa m) {
		if (this.mangia && !m.mangia)
			return -1;

		if (!this.mangia && m.mangia)
			return 1;
		
		int diffDistanceSources = this.distanceSource - m.distanceSource;
		if (diffDistanceSources > 0)
			return -1;
		if (diffDistanceSources < 0)
			return 1;
		
		int diffDistanceDestinations = this.distanceDestination
				- m.distanceDestination;
		if (diffDistanceDestinations < 0)
			return -1;
		if (diffDistanceDestinations > 0)
			return 1;
		return 0;
	}

	@Override
	public String toString() {
		String s = "";
		// if (player == 0) {
		// s = "IL BIANCO MUOVE: ";
		// } else {
		// s = "IL NERO MUOVE: ";
		// }
		// s += "Mossa del giocatore " + this.player;
		// s += "; dalla cella [" + cellStartX + ";" + cellStartY + "]";
		// s += "; alla cella [" + cellDestX + ";" + cellDestY + "]";
		// s += ";mangia=" + mangia;
		// s += "; distanza SOURCE dal Baricentro=" + distanceSource;
		// s += "; distanza DESTINATION dal Baricentro=" + distanceDestination;
		switch (cellStartY) {
		case 0:
			s += 'A';
			break;
		case 1:
			s += 'B';
			break;
		case 2:
			s += 'C';
			break;
		case 3:
			s += 'D';
			break;
		case 4:
			s += 'E';
			break;
		case 5:
			s += 'F';
			break;
		case 6:
			s += 'G';
			break;
		case 7:
			s += 'H';
			break;
		default:
			throw new IllegalStateException("Casella Partenza Errata");
		}
		s += (8 - cellStartX);
		s += '-';
		switch (cellDestY) {
		case 0:
			s += 'A';
			break;
		case 1:
			s += 'B';
			break;
		case 2:
			s += 'C';
			break;
		case 3:
			s += 'D';
			break;
		case 4:
			s += 'E';
			break;
		case 5:
			s += 'F';
			break;
		case 6:
			s += 'G';
			break;
		case 7:
			s += 'H';
			break;
		default:
			throw new IllegalStateException("Casella Partenza Errata");
		}
		s += (8 - cellDestX);
		s += "\n";
		return s;
	}
}
